package com.ycyoes.test.hollis.concurrent;

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class FibonacciTask extends RecursiveTask<Integer> {
    private final int n;

    public FibonacciTask(int n) {
        this.n = n;
    }

    @Override
    protected Integer compute() {
        if (n <= 1) { // 如果 n 小于等于 1，则直接返回 n
            return n;
        } else {
            // 创建两个子任务，分别计算 n-1 和 n-2 的斐波那契数列
            FibonacciTask f1 = new FibonacciTask(n - 1);
            f1.fork(); // 使用 fork() 方法异步执行第一个子任务
            FibonacciTask f2 = new FibonacciTask(n - 2);
            int result = f2.compute(); // 同步执行第二个子任务，并获取计算结果
            return result + f1.join(); // 使用 join() 方法获取第一个子任务的计算结果，并相加得到最终结果
        }
    }

    public static void main(String[] args) {
        ForkJoinPool pool = new ForkJoinPool(); // 创建 ForkJoinPool 对象
        FibonacciTask task = new FibonacciTask(10); // 创建 FibonacciTask 对象
        int result = pool.invoke(task); // 使用 invoke() 方法执行计算任务
        System.out.println(result); // 输出结果
    }
}

